#pragma once

#include "State.h"
#include "BaseObject.h"
#include "StateMachine.h"
#include "EnemyOwnedStates.h"
#include "EntityManager.h"
#include "Asset Library.h"
#include "globals.h"
#include "gamemap.h"
#include "managegame.h"

class Tower : public BaseObject
{
	StateMachine<Tower>*	f_pStateMachine;

public:
	Tower() : BaseObject()
	{
		f_pStateMachine = new StateMachine<Tower>(this);
	}

	~Tower()
	{
		delete f_pStateMachine;
	}

	void update(int);

	//this method changes the current state to the new state. It first calls 
	//the Exit() method of the current state, then assigns the new state to 
	//M_pCurrentState and finally calls the Enter() method of the new state.
	void ChangeState(State<Enemy>* NewState);

	StateMachine<Tower>* GetFSM()const{return f_pStateMachine;}
};